]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
appDisplay: Move findBestPageToAppend() behavior to IconGrid
authorJonas Dreßler <verdre@v0yd.nl>
Fri, 24 Jun 2022 14:02:54 +0000 (16:02 +0200)
committerMarge Bot <marge-bot@gnome.org>
Wed, 1 Feb 2023 12:56:28 +0000 (12:56 +0000)
This behavior makes more sense to have in the iconGrid itself: When a
page is filled up with items, the new item should never go to the start
of the next page, but always to next empty slot.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2348>

js/ui/appDisplay.js
js/ui/iconGrid.js

index 7fbb83b32e1e7f55b11d8e6b35493805b4ad321f..91c428a0798ab4db127bb2e64b8ec55e35bf58c2 100644 (file)
@@ -1074,11 +1074,6 @@ var BaseAppView = GObject.registerClass({
     }
 
     _addItem(item, page, position) {
-        // Append icons to the first page with empty slot, starting from
-        // the second page
-        if (this._grid.nPages > 1 && page === -1 && position === -1)
-            page = this._findBestPageToAppend();
-
         this._items.set(item.id, item);
         this._grid.addItem(item, page, position);
 
@@ -1125,10 +1120,18 @@ var BaseAppView = GObject.registerClass({
         // Add new app icons, or move existing ones
         newApps.forEach(icon => {
             const [page, position] = this._getItemPosition(icon);
-            if (addedApps.includes(icon))
-                this._addItem(icon, page, position);
-            else if (page !== -1 && position !== -1)
+            if (addedApps.includes(icon)) {
+                // If there's two pages, newly installed apps should not appear
+                // on page 0
+                if (page === -1 && position === -1 && this._grid.nPages > 1)
+                    this._addItem(icon, 1, -1);
+                else
+                    this._addItem(icon, page, position);
+            } else if (page !== -1 && position !== -1) {
                 this._moveItem(icon, page, position);
+            } else {
+                // App is part of a folder
+            }
         });
 
         this.emit('view-loaded');
@@ -1484,7 +1487,7 @@ class AppDisplay extends BaseAppView {
             let [page, position] = this._grid.getItemPosition(item);
 
             if (page === -1)
-                page = this._findBestPageToAppend(this._grid.currentPage);
+                page = this._grid.currentPage;
 
             return [page, position];
         }
index 7030ed87cbd17519f91d0d61fa8ab0a3a98cceb3..523237782f181f3558f00b865d9744ef32e07f69 100644 (file)
@@ -798,6 +798,19 @@ var IconGridLayout = GObject.registerClass({
         this._shouldEaseItems = false;
     }
 
+    _findBestPageToAppend(startPage) {
+        const itemsPerPage = this.columnsPerPage * this.rowsPerPage;
+
+        for (let i = startPage; i < this._pages.length; i++) {
+            const visibleItems = this._pages[i].visibleChildren;
+
+            if (visibleItems.length < itemsPerPage)
+                return i;
+        }
+
+        return this._pages.length;
+    }
+
     /**
      * addItem:
      * @param {Clutter.Actor} item: item to append to the grid
@@ -822,6 +835,9 @@ var IconGridLayout = GObject.registerClass({
         if (!this._container)
             return;
 
+        if (page !== -1 && index === -1)
+            page = this._findBestPageToAppend(page);
+
         this._shouldEaseItems = true;
 
         this._container.add_child(item);
@@ -853,6 +869,10 @@ var IconGridLayout = GObject.registerClass({
         this._shouldEaseItems = true;
 
         this._removeItemData(item);
+
+        if (newPage !== -1 && newPosition === -1)
+            newPage = this._findBestPageToAppend(newPage);
+
         this._addItemToPage(item, newPage, newPosition);
     }